"use strict";

const Controller = require("egg").Controller;

class HomeController extends Controller {
    async index() {
        const {ctx} = this;
        ctx.body = "EXE Frontend Team";
    }

    /**
     * 注意：该方法只是用于测试扫码登录流程
     *
     * 1. 对于单页应用来说，可以在项目根目录定义一个中间页用于接收企业微信服务器返回的code，
     *    然后在获取code后，调用服务端提供的API接口，进而获取当前扫码登录的用户信息。
     * 2. 当成功获取用户信息，再使用框架的路由API执行跳转至项目主页。
     * 3. 对于非单页应用可以调用ctx.redirect()方法，执行重定向。
     *
     * 参考资源：https://github.com/Chooin/wechat-spa - 微信端单页面应用（SPA）常见问题汇总及解决方案
     */
    async auth() {
        const {ctx} = this;
        let {code} = ctx.query;
        console.log('auth code', code);
        const accessToken = await ctx.service.wechat.getAccessToken();
        console.log('auth', accessToken);

        if (code && accessToken) {
            const result = await ctx.curl(
                `https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=${accessToken}&code=${code}`,
                {
                    dataType: "json"
                }
            );
            console.dir('auth result:' + JSON.stringify(result));

            if (!result) {
                ctx.body = {};
            }


            if (result.data && result.data.errcode == 0) {
                const userId = result.data.UserId;
                const user = await ctx.service.user.findOneUser({userId});
                // 添加登录log
                const reqData = this.ctx.request.header
                ctx.service.loginLog.add({
                    userId,
                    userIp: reqData["host"], // 登录ip
                    userAgent: reqData["user-agent"],  
                })
                console.log('扫码验证成功');
                if (user) {
                    console.log('系统存在用户');
                    console.log(user)
                    const token = ctx.app.jwt.sign({
                        id: user._id,
                        role: user.role ? user.role.name : 'visitor'
                    }, ctx.app.config.jwt.secret, {
                        expiresIn: ctx.app.config.jwt.expiresIn
                    });
                    console.log('token:',token)
                    ctx.cookies.set('token', token);
                    ctx.body = {
                        code: 200,
                        data: {
                            user, token
                        },
                        success: true,
                        msg: ``
                    };
                } else {
                    console.log('系统不存在用户');
                    try {
                        const newUser = await ctx.service.user.createUser({
                            // name: result.data.name, // 姓名
                            userId: userId, // 用户Id
                            //tenantId: result.data.tenantId, // 租户ID
                           // password: 'e10adc3949ba59abbe56e057f20f883e', // 用户密码
                            createDate: new Date(), // 创建时间
                            updateDate: new Date(), // 修改时间
                        });
                        const token = ctx.app.jwt.sign({id: newUser._id, role: 'visitor'}, ctx.app.config.jwt.secret, {
                            expiresIn: ctx.app.config.jwt.expiresIn
                        });
                        ctx.cookies.set('token', token);
                        console.log('t-',token)
                        ctx.body = {
                            code: 200,
                            data: {
                                user: newUser, token
                            },
                            success: true,
                            msg: ``
                        };
                    } catch (err) {
                        throw err;
                    }
                }


            } else {

                ctx.body = result;
            }

        }
}

}

module.exports = HomeController;